gemeenten_shapefile = 'gadm41_NLD_1.shp'
gdf = gpd.read_file(gemeenten_shapefile)
gdf = gdf[~gdf['NAME_1'].isin(['Zeeuwse meren', 'IJsselmeer'])]
gdf.loc[gdf['NAME_1'] == 'Fryslân', 'NAME_1'] = 'Friesland'
gdf.loc[gdf['NAME_1'] == 'NA', 'NAME_1'] = 'Zuid-Holland'
dataset = pd.read_csv('hoogst_behaald_onderwijsniveau.csv', sep=';', encoding='utf-8')
dataset.columns = [col.strip('\"') for col in dataset.columns]
merged = gdf.merge(dataset, how='left', left_on='NAME_1', right_on="Regio's")
counties_geojson = merged.__geo_interface__
fig = go.Figure()
fig.add_trace(go.Choroplethmapbox(
geojson=counties_geojson,
locations=merged.index,
z=merged['Laag onderwijsniveau (%)'],
colorscale='blues',
zmin=merged['Laag onderwijsniveau (%)'].min(),
zmax=merged['Laag onderwijsniveau (%)'].max(),
marker_opacity=0.5,
marker_line_width=1.5,
hovertemplate='<b>%{properties.NAME_1}</b><br>' +
'Laag onderwijsniveau: %{z:.2f} % <extra></extra>',
visible=True,
name='Laag onderwijsniveau (%)'
))
fig.add_trace(go.Choroplethmapbox(
geojson=counties_geojson,
locations=merged.index,
z=merged['Middelbaar onderwijsniveau (%)'],
colorscale='blues',
zmin=merged['Middelbaar onderwijsniveau (%)'].min(),
zmax=merged['Middelbaar onderwijsniveau (%)'].max(),
marker_opacity=0.5,
marker_line_width=1.5,
hovertemplate='<b>%{properties.NAME_1}</b><br>' +
'Middelbaar onderwijsniveau: %{z:.2f} % <extra></extra>',
visible=False,
name='Middelbaar onderwijsniveau (%)'
))
fig.add_trace(go.Choroplethmapbox(
geojson=counties_geojson,
locations=merged.index,
z=merged['Hoog onderwijsniveau (%)'],
colorscale='blues',
zmin=merged['Hoog onderwijsniveau (%)'].min(),
zmax=merged['Hoog onderwijsniveau (%)'].max(),
marker_opacity=0.5,
marker_line_width=1.5,
hovertemplate='<b>%{properties.NAME_1}</b><br>' +
'Hoog onderwijsniveau: %{z:.2f} % <extra></extra>',
visible=False,
name='Hoog onderwijsniveau (%)'
))
fig.update_layout(
mapbox_style="carto-positron",
mapbox_zoom=6,
mapbox_center={"lat": 52.1326, "lon": 5.2913},
margin={"r": 150, "t": 100, "l": 100, "b": 150},
title='Onderwijsniveaus in Nederlandse provincies',
coloraxis_colorbar=dict(
title='Onderwijsniveau (%)',
ticksuffix=' %',
),
width=750,
height=800,
paper_bgcolor='#ede6dc',
plot_bgcolor='#ede6dc'
)
steps = []
for i, level in enumerate(['Laag onderwijsniveau (%)', 'Middelbaar onderwijsniveau (%)', 'Hoog onderwijsniveau (%)']):
step = dict(
method="update",
args=[{"visible": [False] * len(fig.data)},
{"title": f"{level} in Nederlandse provincies"}],
label=level
)
step["args"][0]["visible"][i] = True
steps.append(step)
sliders = [dict(
active=0,
currentvalue={"prefix": "Onderwijsniveau: "},
pad={"t": 50},
steps=steps
)]
fig.update_layout(sliders=sliders)
fig.show()